SPSS VECTOR – 快速教程
作者:Ruben Geert van den Berg,归档于 SPSS A-Z
在 SPSS 中,VECTOR(向量) 是一个变量列表(可以是新建的或已存在的),可以通过它们在这个列表中的索引来引用。VECTOR 经常与 LOOP(循环) 结合使用。
使用 VECTOR 和 LOOP 创建虚拟变量
SPSS Vector - 基础示例
假设我们需要为包含 1 到 4 值的变量 在 SPSS 中创建虚拟变量。我们将这四个虚拟变量命名为 d1 到 d4。运行 VECTOR d(4).
首先会创建这些新的(空)变量。只要 VECTOR 生效,d1 就可以用 d(1) 来表示,以此类推。让我们首先运行下面的 语法 (syntax) 来验证这一点。
SPSS Vector 语法示例
***1. 创建迷你数据集。**
data list free/original.
begin data
1 2 3 4
end data.
***2. 为新变量 d1 到 d4 定义向量。**
vector d(4).
***3. 只要向量存在,d1 就可以用 d(1) 表示,以此类推。**
compute d(1) = original = 1.
compute d(2) = original = 2.
compute d(3) = original = 3.
compute d(4) = original = 4.
exe.
SPSS Vector 与 LOOP 结合使用
我们的第一个 VECTOR 语法示例并没有节省任何工作量。那么为什么要在这里使用 VECTOR 呢?关键在于,能够通过索引来寻址变量,使我们能够 LOOP (循环) 遍历它们。下面的语法建立在前一个示例的基础上,展示了最简单的示例。它删除了新变量,然后以更有效的方式重新创建它们。请注意,我们使用了一个 暂存变量 (scratch variable) 作为循环索引。这个 COMPUTE
命令可能会让你觉得奇怪。它在 Compute A = B = C 中进行了解释。
SPSS Vector 与 LOOP 语法
***1. 删除新变量。**
delete variables d1 to d4.
***2. Vector。**
vector d(4).
***3. 使用 vector 与 loop。**
loop #i = 1 to 4.
compute d(#i) = original = #i.
end loop.
exe.
最快的虚拟化
VECTOR 的一个鲜为人知的用途是通过一个非恒定值(对于不同的个案)来寻址变量。因此,如果我们有一个变量 original
,COMPUTE d(original) = 1.
会为不同的个案生成不同的 COMPUTE
命令。因此,对于一个 original
值为 3 的个案,它意味着 COMPUTE d3 = 1.
。其他新变量 d1、d2 和 d4 不受影响(因此只包含 系统缺失值 (system missing values)),但我们将使用 RECODE 来解决这个问题。
下面的语法可能是创建未标记的虚拟变量的最快方法。但是,由于强烈建议标记新变量及其值,因此我们建议使用我们的 Create Dummy Variables 工具以满足实际需求。
SPSS Vector 语法示例
***1. 删除新变量。**
delete variables d1 to d4.
***2. Vector。**
vector d(4).
***3. 在 vector 中使用非恒定值(对于不同的个案,即变量 "original")。**
compute d(original) = 1.
exe.
***4. 更正新变量中的系统缺失值。**
recode d1 to d4 (sysmis = 0).
exe.
SPSS Vector 用于现有变量
到目前为止,我们使用 VECTOR 创建新变量。或者,我们可以使用它来寻址现有变量,语法略有不同:对于寻址(现有)变量 d1 到 d4,我们将使用 VECTOR d = d1 TO d4.
。我们可以使用它来反转上述虚拟化。下一个语法示例通过循环遍历一个 IF 命令来演示这一点。
SPSS Vector 语法示例
***1. Vector 用于现有变量,而不是新变量。**
vector d = d1 to d4.
***2. 从虚拟变量重建多项变量。**
loop #v = 1 to 4.
if d(#v) = 1 reconstructed = #v.
end loop.
exe.
SPSS Vector - 最终说明
- 如果需要,可以在一个 VECTOR 命令中同时定义多个向量。
- 熟悉 DO REPEAT 的人会注意到,VECTOR 和 LOOP 的组合提供了相当类似的功能。这里可以进行比较,但超出了本教程的范围。
- 作为一个小的技术点,任何 VECTOR 定义仅在运行任何转换之前有效。
SPSS Vector 奖励示例
1. 向前移动值
“我的数据中存在缺失值。我想在个案中向前移动有效值,使它们相邻。我该如何实现?”
移动有效值之前和之后的数据
SPSS Vector 语法示例
***1. 创建数据集。**
data list free/x1 to x5.
begin data
'' '' '' 0 1 1 0 '' 0 1 '' '' 0 '' 1 '' 0 1 0 '' 1 1 1 '' '' '' '' 1 '' '' ''
'' 0 0 1 1 1 '' '' 1 '' 1 '' 0 '' '' 1 1 '' 0
end data.
***2. 向前移动值。**
compute #new = 1.
vector x = x1 to x5 / v(5).
loop #old = 1 to 5.
if not(sysmis(x(#old))) v(#new) = x(#old).
if not(sysmis(x(#old))) #new = #new + 1.
end loop.
exe.
解释
我们将使用一个向量表示现有变量,另一个向量表示新变量。我们将循环遍历旧变量,每次遇到有效值时,#new 都会增加 1。这样,v(#new) 可能对于不同的个案引用不同的变量。但是,它总是引用尚未具有有效值的第一个新变量。正是这个变量将获取我们在旧变量上遇到的下一个有效值。
2. 取消排名数据
“我要求受访者对 5 种产品进行排名。第一个变量包含他们的首选,第二个变量包含他们的第二选择,依此类推。但是,我希望每个产品都有一个变量,如果它是首选,则为 1,如果它是第二选择,则为 2,依此类推。”
取消排名值之前和之后的数据
SPSS Vector 语法示例
***1. 创建排名数据。**
data list free/c1 to c5. /*c1 是首选,c2 是第二选择,依此类推。
begin data.
3 4 2 5 1 2 4 5 1 3 1 3 4 5 2 2 5 3 4 1
end data.
***2. 取消排名数据。**
vector o(5)/old = c1 to c5./*o1 是选择的第一个选项,o2 是第二个,依此类推。
loop #value = 1 to 7.
compute o(old(#value)) = #value.
end loop.
exe.
解释
我们基本上是在循环内使用一个向量,这个向量又嵌套在另一个向量中。因此,第一个变量持有的值引用新变量的向量索引,该变量获得值 1。接下来,值 2 传递到其索引位于 c2 中的新变量,依此类推。